package 第三天

/**
 * 递归方式次数比较多的话会报堆内存溢出，递归的内存开销比较大
 * 但是迭代不会报这个错，
 *
 * 递归优化（必须是尾递归，递归里面调用当前的函数之后没有执行其他的操作就是尾递归）
 */

fun main(args: Array<String>) {
    //1到n的和
    println(sum1(10, 0))
}

fun sum2(n: Int): Int {
    var count = n
    var sum = 0
    while (n > 0) {
        sum += count
        count--
    }
    return sum
}

tailrec fun sum1(n: Int, result: Int): Int {
    if (n == 1) return result+1
//    return sum(n-1)+n //这个应为加n所以不是尾递归

    return sum1(n - 1, result + n)
}